const _ = require("lodash"); // 安装：npm install lodash
const { readAllValues } = require('../awakened-potential/helpers/readAllValues.js')

/**
 * 从历史数据中预测下一期可能出现的号码
 * @param {Array<{ time: string, number: number }>} history 历史开奖数据
 * @param {Object} options 配置项
 * @param {number} options.windowSize 用于分析的历史期数（窗口大小）
 * @param {number} options.hotCount 推荐的热号数量
 * @param {number} options.coldCount 推荐的冷号数量
 * @returns {{ hot: number[], cold: number[], recommend: number[] }}
 */
function predictNextNumber(history, options = {}) {
  const windowSize = options.windowSize || 100; // 默认只分析最近 100 期
  const hotCount = options.hotCount || 12; // 默认推荐 12 个热号
  const coldCount = options.coldCount || 12; // 默认推荐 12 个冷号

  // 初始化号码出现次数统计（1 ~ 49）
  const countMap = Array(50).fill(0); // 索引 0 不使用，号码是 1~49

  // 获取分析用的最近 N 期数据
  const recent = history.slice(-windowSize);

  // 遍历最近 N 期数据，统计每个号码出现次数
  for (const item of recent) {
    const number = item.number;
    if (number >= 1 && number <= 49) {
      countMap[number]++;
    }
  }

  // 构造统计结果 [{ number: 1, count: 3 }, ...]
  const result = countMap.map((count, number) => ({ number, count })).slice(1); // 去掉索引 0

  // 排序：从高到低，获取热号
  const hotNumbers = _.orderBy(result, ["count", "number"], ["desc", "asc"])
    .slice(0, hotCount)
    .map((item) => item.number);

  // 排序：从低到高，获取冷号（未出现次数多的）
  const coldNumbers = _.orderBy(result, ["count", "number"], ["asc", "asc"])
    .slice(0, coldCount)
    .map((item) => item.number);

  // 推荐组合：热号 + 冷号（可自定义混合比例）
  const recommend = [...hotNumbers, ...coldNumbers];

  // 返回结果
  return {
    hot: hotNumbers,
    cold: coldNumbers,
    recommend: _.uniq(recommend).sort((a, b) => a - b),
  };
}

// ========== ✅ 示例调用（测试）==========

// 读取历史数据 JSON 文件
const historyData = readAllValues('m')

// 调用预测函数
const result = predictNextNumber(historyData, {
  windowSize: 100,
//   hotCount: 16,
//   coldCount: 8,

  hotCount: 21,
  coldCount: 11,
});

console.log("🔥 热号推荐:"+`(${result.hot.length})`, result.hot);
console.log("❄️ 冷号推荐:"+`(${result.cold.length})`, result.cold);
console.log("🎯 最终推荐号码:"+`(${result.recommend.length})`, result.recommend);
